/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.star.common;

import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author ngotandieu
 */
public enum UserRole {

    PROFILE("1", "Profile", (byte)1),
    PROFILE_VIEW("1.1", "Xem profile", (byte)0),
    PROFILE_ADD("1.2", "Thêm profile", (byte)0),
    PROFILE_EDIT("1.3", "Chỉnh sửa profile", (byte)0),
    
    POST("2", "Tin tức profile", (byte)1),
    POST_VIEW("2.1", "Xem tin tức profile", (byte)0),
    POST_ADD("2.2", "Thêm tin tức profile", (byte)0),
    POST_EDIT("2.3", "Chỉnh sửa tin tức profile", (byte)0),    
    POST_PUBLIC("2.4", "Duyệt tin tức profile", (byte)0),
    
    CATEGORY("3", "Danh mục profile", (byte)1),
    CATEGORY_VIEW("3.1", "Xem danh mục profile", (byte)0),
    CATEGORY_EDIT("3.2", "Chỉnh sửa danh mục profile", (byte)0),         
    
    NEWS("4", "Tin tức", (byte)1),
    NEWS_VIEW("4.1", "Xem tin tức", (byte)0),
    NEWS_ADD("4.2", "Thêm tin tức", (byte)0),
    NEWS_EDIT("4.3", "Chỉnh sửa tin tức", (byte)0), 
    NEWS_PUBLIC("4.4", "Duyệt tin tức", (byte)0),
    
    NEWS_CATEGORY("5", "Danh mục tin tức", (byte)1),
    NEWS_CATEGORY_VIEW("5.1", "Xem danh mục tin tức", (byte)0),
    NEWS_CATEGORY_EDIT("5.2", "Chỉnh sửa danh mục tin tức", (byte)0),          
    
    C_NEWS("6", "Crawler", (byte)1),    
    C_NEWS_EDIT("6.1", "Duyệt tin từ crawler", (byte)0),
    
    ACTION("7", "Log", (byte)1),
    ACTION_VIEW("7.1", "Xem log", (byte)0),  
    
    USER("8", "Người dùng", (byte)1),
    USER_ADD("8.1", "Thêm người dùng", (byte)0),
    USER_EDIT("8.2", "Chỉnh sửa người dùng", (byte)0),
    
    USER_GROUP("9", "Nhóm người dùng", (byte)1),
    USER_GROUP_ADD("9.1", "Thêm nhóm người dùng", (byte)0),
    USER_GROUP_EDIT("9.2", "Chỉnh sửa nhóm người dùng", (byte)0),
    
    MANAGE_HOME_PAGE("10", "Trang chủ", (byte)1),
    EDIT_HOME_PAGE("10.1", "Sắp xếp bài viết lên trang chủ", (byte)0);
    
    String role;
    private String name;
    byte parent;

    UserRole(String role, String name, byte parent) {
        this.role = role;
        this.name = name;
        this.parent = parent;
    }

    public String getRole() {
        return role;
    }

    public String getName() {
        return name;
    }
    
    public boolean isParent() {
        return parent == 1;
    }   

    static final Map<String, UserRole> byId = Collections.synchronizedMap(new HashMap<String, UserRole>());
    static final Map<String, UserRole> byName = Collections.synchronizedMap(new HashMap<String, UserRole>());

    static {
        for (UserRole role : EnumSet.allOf(UserRole.class)) {
            byId.put(role.getRole(), role);
            byName.put(role.getName(), role);
        }
    }

    public static UserRole getById(String id) throws IllegalArgumentException {
        UserRole role = byId.get(id);
        if (role == null) {
            throw new IllegalArgumentException(String.format("User Role with ID %s does not exist.", id));
        }
        return role;
    }
}
